Introducción

El presente trabajo se presenta como una continuación y profundización del Trabajo Práctico 01, que se puede encontrar en el siguiente enlace: https://github.com/mlincemarino/mu124tp01 (ver al final que ande en enlace).

basemipieza <- read.csv2("01-Data/MIPIEZA_BASE-FINAL-03.csv", encoding = "UTF-8", header = TRUE) #Acá leemos el csv. 

Repasando, y a modo de resumen, en el ejercicio anterior se realizaron las siguientes acciones sobre la base:

  • Limpiar la base para seleccionar solo aquellas variables de interés.
  • Agrupar las observaciones por provincia y convertir los nombres de los códigos para facilitar su interpretación.
  • Agrupar las observaciones por región y analizar su distribución en torno a los grupos de tratamiento y grupos de control.

Pregunta a responder para el Trabajo Práctico 02

Siguiendo el análisis realizado en el Trabajo Práctico 01, y con el fin de poder empezar a visualizar geográficamente la información, responderemos a la siguiente pregunta de investigación: ¿existe un balance entre la cantidad de mujeres inscriptas en Mi Pieza y la cantidad de hogares que residen en barrios populares por provincia?. Responderemos esta misma pregunta luego con la base específica de mujeres que forman parte de la muestra para la evaluación de impacto realizada.

Importación de la nueva base de datos

Para responder a la pregunta, empezaremos por importar la base de datos de barrios populares del Registro Nacional de Barrios Populares. La misma fue descargada del siguiente enlance: https://datosabiertos.desarrollosocial.gob.ar/dataset/registro-nacional-de-barrios-populares el día 17 de septiembre de 2023.

baserenabap <- read.csv2("01-Data/2022-07-13_renabap_base.csv", encoding = "UTF-8", header = TRUE, sep = ",") #Acá leemos el csv. 

Visualicemos la base.

library(dplyr)
library(htmltools)
library(rmarkdown)
paged_table(baserenabap) #Visualizamos el archivo con la función "paged_table". 

Como podemos ver, tenemos 5687 filas y 77 columnas / campos.

En base al trabajo anterior, y considerando que nos importa entender la cantidad de barrios que hay por provincia, haremos un trabajo sobre la base que nos permita quedarnos con las variable que más nos importan.

baserenabap_sel <- select(baserenabap, c("provincia", "cantidad_viviendas_aproximadas", "cantidad_familias_aproximada", "superficie_m2", "personas_genero_masc", "personas_genero_fem", "personas_genero_otrx"))
baserenabap_sel <- baserenabap_sel %>%
  mutate(
    provincia = as.factor(provincia),
    cantidad_viviendas_aproximadas = as.numeric(cantidad_viviendas_aproximadas),
    cantidad_familias_aproximada = as.numeric(cantidad_familias_aproximada),
    superficie_m2 = as.numeric(superficie_m2),
    personas_genero_masc = as.numeric(personas_genero_masc),
    personas_genero_fem = as.numeric(personas_genero_fem),
    personas_genero_otrx = as.numeric(personas_genero_otrx)
  )
baserenabap_prov <- baserenabap_sel %>%
  group_by(provincia) %>%
  summarize(
    cantidad_barrios = n(),
    cantidad_viviendas_aproximadas = sum(cantidad_viviendas_aproximadas, na.rm = TRUE),
    cantidad_familias_aproximada = sum(cantidad_familias_aproximada, na.rm = TRUE),
    superficie_m2 = sum(superficie_m2, na.rm = TRUE),
    personas_genero_masc = sum(personas_genero_masc, na.rm = TRUE),
    personas_genero_fem = sum(personas_genero_fem, na.rm = TRUE),
    personas_genero_otrx = sum(personas_genero_otrx, na.rm = TRUE)
  ) 
summary(baserenabap_sel)
##         provincia    cantidad_viviendas_aproximadas
##  Buenos Aires:1933   Min.   :    2.0               
##  Santa Fe    : 408   1st Qu.:   34.0               
##  Chaco       : 401   Median :   80.0               
##  Misiones    : 375   Mean   :  186.8               
##  Mendoza     : 317   3rd Qu.:  188.0               
##  Tucumán     : 298   Max.   :14000.0               
##  (Other)     :1955   NA's   :1                     
##  cantidad_familias_aproximada superficie_m2     personas_genero_masc
##  Min.   :    2.0              Min.   :    368   Min.   :   0.0      
##  1st Qu.:   37.0              1st Qu.:  17680   1st Qu.:   5.0      
##  Median :   88.0              Median :  44703   Median :  60.0      
##  Mean   :  205.5              Mean   : 103794   Mean   : 176.6      
##  3rd Qu.:  207.0              3rd Qu.: 108778   3rd Qu.: 186.0      
##  Max.   :15400.0              Max.   :9715558   Max.   :7789.0      
##  NA's   :1                                                          
##  personas_genero_fem personas_genero_otrx
##  Min.   :   0.0      Min.   :0.00000     
##  1st Qu.:   5.5      1st Qu.:0.00000     
##  Median :  64.0      Median :0.00000     
##  Mean   : 191.2      Mean   :0.08475     
##  3rd Qu.: 200.0      3rd Qu.:0.00000     
##  Max.   :8724.0      Max.   :9.00000     
## 

Tenemos la nueva base con la misma cantidad de observaciones y solo 8 variables. Vamos a proceder a agruparlas por provincia:

Veamos cómo se ve esta nueva base:

paged_table(baserenabap_prov, options(rows.print=25, cols.print=9)) #Visualizamos el archivo con la función "paged_table". 

Visualización gráfica de los datos del RENABAP

Ahora veremos esto gráficamente.

library(tidyverse)
library(geoAr)
arg_geom <- get_geo(geo = "ARGENTINA", level = "provincia") #Me descargo elemento "Argentina" de "get_geo".
ggplot(arg_geom) +
  geom_sf()

library(geofacet)
## rgeos version: 0.6-4, (SVN revision 699)
##  GEOS runtime version: 3.11.0-CAPI-1.17.0 
##  Please note that rgeos will be retired during October 2023,
## plan transition to sf or terra functions using GEOS at your earliest convenience.
## See https://r-spatial.org/r/2023/05/15/evolution4.html for details.
##  GEOS using OverlayNG
##  Linking to sp version: 2.0-0 
##  Polygon checking: TRUE
# 1. Cambiar el nombre de la variable de "codprov_censo" a "provincia" (lo dejo de backup)
arg_geom <- arg_geom %>%
  rename(provincia = codprov_censo)

# 2. Convertir los códigos según el listado proporcionado
codigo_conversion <- c("02" = "CABA", "06" = "BUENOS AIRES", "10" = "CATAMARCA",
                        "14" = "CORDOBA", "18" = "CORRIENTES", "22" = "CHACO",
                        "26" = "CHUBUT", "30" = "ENTRE RIOS", "34" = "FORMOSA",
                        "38" = "JUJUY", "42" = "LA PAMPA", "46" = "LA RIOJA",
                        "50" = "MENDOZA", "54" = "MISIONES", "58" = "NEUQUEN",
                        "62" = "RIO NEGRO", "66" = "SALTA", "70" = "SAN JUAN",
                        "74" = "SAN LUIS", "78" = "SANTA CRUZ", "82" = "SANTA FE",
                        "86" = "SANTIAGO DEL ESTERO", "90" = "TUCUMAN",
                        "94" = "TIERRA DEL FUEGO")

arg_geom <- arg_geom %>%
  mutate(provincia = codigo_conversion[provincia])

Ahora que tenemos el mapa de Argentina dividido en provincias y modificado el código de provincia, incluiremos la cantidad de barrios populares que hay en cada uno. Primero modificaremos el valor de cada dato en la base de RENABAP (baserenabap_prov) a los fines de hacerlo compatible con la forma exacta en que se nombran las provincias en geoAr.

baserenabap_prov <- baserenabap_prov %>%
    mutate(provincia = ifelse(provincia == "Ciudad Autónoma de Buenos Aires", "CABA", toupper(provincia)))
library(stringi)
baserenabap_prov <- baserenabap_prov %>%
  mutate(
    # Quitar acentos y caracteres especiales sin afectar los espacios
    provincia = gsub("[^a-zA-Z0-9 ]", "", stri_trans_nfkd(provincia)),
    provincia = toupper(provincia)  # Convertir a mayúsculas
  )

Ahora sí podemos unir las bases.

mapa_completo <- arg_geom %>%
  right_join(baserenabap_prov, by = "provincia")

Visualicemos la información.

ggplot(mapa_completo)+
  geom_sf(aes(fill=cantidad_barrios), color="#8a8a8a") +
  labs(subtitle="Cantidad de BP por provincia")+
scale_fill_distiller(palette = "Blues", direction=1, guide=guide_legend(direction='horizontal', title.position='top', title.hjust=.5, label.hjust = .5, keywidth = 1, keyheight = 1))+
  geom_sf_label(aes(label=paste0(cantidad_barrios)), size=2.5)+ 
  theme_light()+
  theme(title=element_text(face='bold'),
        legend.position='bottom')
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Como podemos ver, la provincia de Buenos Aires es la que más barrios popualres tiene (casi quintuplicanodo la cantidad de barrios respecto de las provincias que le siguen en orden). Ahora veremos el mismo mapa pero con el porcentaje de viviendas que hay en barrios populares en cada provincia por sobre el total.

# Crear el mapa
# Calcular el porcentaje de viviendas por provincia y otras variables
mapa_completo$porcentaje_viviendas <- round((mapa_completo$cantidad_viviendas_aproximadas / sum(mapa_completo$cantidad_viviendas_aproximadas)) * 100,1)
mapa_completo$porcentaje_barrios <- round((mapa_completo$cantidad_barrios / sum(mapa_completo$cantidad_barrios)) * 100,1)
mapa_completo$porcentaje_superf <- round((mapa_completo$superficie_m2 / sum(mapa_completo$superficie_m2)) * 100,1)

# Crear el mapa
ggplot(mapa_completo) +
  geom_sf(aes(fill = porcentaje_viviendas), color = "#8a8a8a") +
  labs(subtitle = "Porcentaje de viviendas por provincia") +
  scale_fill_distiller(
    palette = "Blues",
    breaks = c(1, 2, 3, 4, 5, 20),
    trans = 'log2',
    direction = 1,
    guide = guide_legend(
      direction = 'horizontal',
      title.position = 'top',
      title.hjust = .5,
      label.hjust = .5,
      keywidth = 1,
      keyheight = 1
    )
  ) +
  geom_sf_label(aes(label = paste0(round(porcentaje_viviendas, 2), "%")), size = 2.3) +  # Mostrar porcentaje con etiquetas
  theme_light() +
  theme(
    title = element_text(face = 'bold'),
    legend.position = 'bottom'
  )
## Warning: Transformation introduced infinite values in discrete y-axis
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Como podemos ver, el 49,11% de las viviendas en barrios populares están ubicadas en Buenos Aires. Además, podemos corroborar que la problemática se concentra en solo 5 provincias. A modo de desafío, resta entender cómo hacer para que el valor de La Pampa no quede en gris tras la transformación logarítmica de los datos, que fue necesaria para poder ver los valores más marcados con la paleta elegida. Este problema surge de que todos los valores se encuentren en un rango chico (0,01% a 7% aprox) y que haya un solo valor extremo (Buenos Aires, con más del 49%).

Ahora veamos el listado de las provincias ordenadas según esta variable:

# Crear la tabla resumen
tabla_resumen <- mapa_completo %>%
  select(provincia, cantidad_barrios, porcentaje_viviendas) %>%
  arrange(desc(porcentaje_viviendas))

# Mostrar la tabla resumen con paged_table
tabla_resumen %>%
  paged_table(options(rows.print = 25))

En función de esto es posible empezar a identificar algunos datos llamativos:

  • CABA tiene solo 50 barrios pero concentra el 7% de las viviendas en barrios populares. - Mendoza tiene varios barrios (317) pero solo tiene el 2,2% de las viviendas en barrios populares.
  • Buenos Aires concentra bastante menos que la mitad de barrios populares. Sin embargo, tiene casi la mitad de las viviendas del país en barrios populares.
  • Es probable que la situación de CABA y Buenos Aires se da a la alta concentración de barrios populares densos que tiene el Área Metropolitana de Buenos Aires.

Análisis en geofacet

Ahora analizaremos esto en geofacet.

library(geofacet)
grid_preview(argentina_grid2)
## Note: You provided a user-specified grid. If this is a generally-useful
##   grid, please consider submitting it to become a part of the geofacet
##   package. You can do this easily by calling:
##   grid_submit(__grid_df_name__)

# COMANDOS EMPATAR NOMBRES DE DISTRITOS DE GRILLA (geofacet) Y BASE DE DATOS
argentina_grid2 <-  data.frame(
  col = c(1, 3, 5, 1, 2, 1, 3, 4, 2, 2, 4, 1, 3, 3, 4, 1, 2, 2, 1, 1, 2, 1, 1, 1),
  row = c(1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 8, 9, 10),
  code = c("AR-Y", "AR-P", "AR-N", "AR-A", "AR-T", "AR-K", "AR-H", "AR-W", "AR-G", "AR-X", "AR-E", "AR-F", "AR-S", "AR-B", "AR-C", "AR-J", "AR-D", "AR-L", "AR-M", "AR-Q", "AR-R", "AR-U", "AR-Z", "AR-V"),
  name_prov = c("JUJUY", "FORMOSA", "MISIONES", "SALTA", "TUCUMAN", "CATAMARCA", "CHACO", "CORRIENTES", "SANTIAGO DEL ESTERO", "CORDOBA", "ENTRE RIOS", "LA RIOJA", "SANTA FE", "BUENOS AIRES", "CABA", "SAN JUAN", "SAN LUIS", "LA PAMPA", "MENDOZA", "NEUQUEN", "RIO NEGRO", "CHUBUT", "SANTA CRUZ", "TIERRA DEL FUEGO"),
  stringsAsFactors = FALSE
)
# Renombrar la columna "provincia" a "name_prov"
names(mapa_completo)[names(mapa_completo) == "provincia"] <- "name_prov"
library(tidyr)
# Seleccionar solo las columnas de interés
mapa_completo_largo <- mapa_completo %>%
  select(name_prov, porcentaje_barrios, porcentaje_viviendas, porcentaje_superf) %>%
  gather(variable, porcentaje, porcentaje_barrios:porcentaje_superf)
ggplot(mapa_completo_largo, aes(variable, porcentaje, fill = variable)) +
  geom_col() +
  geom_text(aes(label = paste0(porcentaje, "%"), 
                y = porcentaje),
            hjust = -0.5,
            size = 2) +  # Agregar etiquetas de texto con los porcentajes
  coord_flip() +
  theme_bw() +
  facet_geo(~ name_prov, grid = argentina_grid2) +
  scale_y_continuous(expand = c(0, 0)) +
  labs(title = "Distribución de las variables por provincia",
       caption = "Datos RENABAP",
       x = NULL, 
       y = "Porcentaje") +
  theme(axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.text.x = element_text(size = 6),
        legend.text = element_text(size = 5),  # Ajustar tamaño de texto de la leyenda
        legend.title = element_text(size = 5)) +  # Ajustar tamaño del título de la leyenda
  guides(fill = guide_legend(title = "Variable", label.theme = element_text(size = 8)))  # Ajustar tamaño del texto en la guía
## Note: You provided a user-specified grid. If this is a generally-useful
##   grid, please consider submitting it to become a part of the geofacet
##   package. You can do this easily by calling:
##   grid_submit(__grid_df_name__)

Análisis en comparación con base de la muestra

  1. una visualización standard de los datos (esto sería, con geom_ de ggplot2 NO SIG. En este punto, es posible y valorable la utilización de geofacet como alternativa GEO); y

  2. una viz utilizando geom_sf como capa de la VIZ.